import http.server
import socketserver
import socket

# 定义服务器端口
PORT = 80

def get_local_ips():
    """获取所有局域网IP地址"""
    ips = []
    try:
        # 获取主机名
        host_name = socket.gethostname()
        # 根据主机名获取所有IP地址
        for info in socket.getaddrinfo(host_name, None):
            ip = info[4][0]
            if ':' not in ip:  # 排除IPv6地址
                ips.append(ip)
    except Exception as e:
        print(f"获取本地IP地址时出错: {e}")
    return list(set(ips))  # 去重

class MyHttpRequestHandler(http.server.SimpleHTTPRequestHandler):
    def end_headers(self):
        # 强制设置编码为utf-8，对于HTML响应
        self.send_header("Content-Type", "text/html;charset=utf-8")
        super().end_headers()

    def do_GET(self):
        # 如果请求路径是根目录，则重定向到index.html
        if self.path == '/':
            self.path = 'index.html'
        # 调用基类方法处理请求，包括加载和发送指定的资源（HTML, CSS, 图片, 视频等）
        return http.server.SimpleHTTPRequestHandler.do_GET(self)

# 创建一个TCP socket服务器
with socketserver.TCPServer(("", PORT), MyHttpRequestHandler) as httpd:
    # 提示用户可以使用的IP地址
    local_ips = get_local_ips()
    if local_ips:
        print("当前网站默认主页为：index.html,请通过以下IP地址访问服务器:")
        for ip in local_ips:
            # 判断是否使用默认HTTP端口，决定是否显示端口号
            if PORT == 80:
                print(f"http://{ip}/")
            else:
                print(f"http://{ip}:{PORT}/")
    else:
        if PORT == 80:
            print("无法自动检测到可用的IP地址，请尝试 http://localhost/")
        else:
            print(f"无法自动检测到可用的IP地址，请尝试 http://localhost:{PORT}/")

    try:
        if PORT == 80:
            print("服务器正在运行，监听默认HTTP端口...")
        else:
            print(f"服务器正在运行，监听端口 {PORT}...")
        # 激活服务器；服务器将一直运行直到手动停止
        httpd.serve_forever()
    except KeyboardInterrupt:
        # 当用户按下Ctrl+C时关闭服务器
        print("\n正在关闭服务器...")
        httpd.shutdown()
